<?php

class FCKeditor {
	var $InstanceName;
	var $BasePath;
	var $Width;
	var $Height;
	var $ToolbarSet;
	var $Value;
	var $Config;
	
	function FCKeditor($instanceName) {
		$this->InstanceName = $instanceName;
		$this->BasePath = '/fckeditor/';
		$this->Width = '100%';
		$this->Height = '200';
		$this->ToolbarSet = 'Default';
		$this->Value = '';
		
		$this->Config = array ();
	}
	
	function Create() {
		echo $this->CreateHtml ();
	}
	
	function CreateHtml() {
		$HtmlValue = htmlspecialchars ( $this->Value );
		
		$Html = '';
		
		if (! isset ( $_GET )) {
			global $HTTP_GET_VARS;
			$_GET = $HTTP_GET_VARS;
		}
		
		if ($this->IsCompatible ()) {
			$File = 'fckeditor.html';
			
			$Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}";
			
			if ($this->ToolbarSet != '')
				$Link .= "&amp;Toolbar={$this->ToolbarSet}";
				
			// Render the linked hidden field.
			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />";
			
			// Render the configurations hidden field.
			$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString () . "\" style=\"display:none\" />";
			
			// Render the editor IFRAME.
			$Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"0\" scrolling=\"no\"></iframe>";
		} else {
			if (strpos ( $this->Width, '%' ) === false)
				$WidthCSS = $this->Width . 'px';
			else
				$WidthCSS = $this->Width;
			
			if (strpos ( $this->Height, '%' ) === false)
				$HeightCSS = $this->Height . 'px';
			else
				$HeightCSS = $this->Height;
			
			$Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>";
		}
		
		return $Html;
	}
	
	function IsCompatible() {
		return FCKeditor_IsCompatibleBrowser ();
	}
	
	function GetConfigFieldString() {
		$sParams = '';
		$bFirst = true;
		
		foreach ( $this->Config as $sKey => $sValue ) {
			if ($bFirst == false)
				$sParams .= '&amp;';
			else
				$bFirst = false;
			
			if ($sValue === true)
				$sParams .= $this->EncodeConfig ( $sKey ) . '=true';
			else if ($sValue === false)
				$sParams .= $this->EncodeConfig ( $sKey ) . '=false';
			else
				$sParams .= $this->EncodeConfig ( $sKey ) . '=' . $this->EncodeConfig ( $sValue );
		}
		
		return $sParams;
	}
	
	function EncodeConfig($valueToEncode) {
		$chars = array ('&' => '%26', '=' => '%3D', '"' => '%22' );
		
		return strtr ( $valueToEncode, $chars );
	}
}
